package pres.lnk.learn.designpattern.m_proxy;

/**
 * <p>代理模式</p>
 * <pre>
 * 一个类代表另一个类的功能
 * 被代理类的方法执行都是通过代理类执行的，所以代理类在执行方法的前后做一些操作，甚至修改执行结果，例如添加执行日志
 * </pre>
 * @Author lnk
 * @Date 2018/4/10
 */
public class Main {
    public static void main(String[] args) {
        staticProxy();
        System.out.println();
        dynamicProxy();
    }

    /**
     * 静态代理模式
     *
     * @see UserDaoStaticProxy
     */
    public static void staticProxy(){
        System.out.println("静态代理模式");
        UserDao userDao = new UserDaoImpl();
        UserDao proxy = new UserDaoStaticProxy(userDao);
        proxy.save();
        proxy.select();
    }


    /**
     * 动态代理模式
     *
     * @see UserDaoDynamicProxy
     */
    public static void dynamicProxy(){
        System.out.println("动态代理模式");
        UserDao userDao = new UserDaoImpl();
        UserDao proxy = new UserDaoDynamicProxy(userDao).getProxy();
        proxy.save();
        proxy.select();
    }
}
